package top.zywork.service;

import org.springframework.web.multipart.MultipartFile;
import top.zywork.common.UploadUtils;
import top.zywork.vo.ResponseStatusVO;

/**
 * UploadService服务接口<br/>
 * <p>
 * 创建于2019-03-29<br/>
 *
 * @author http://zywork.top 王振宇
 * @version 1.0
 */
public interface UploadService {

    /**
     * 单文件上传
     *
     * @param storageProvider 存储提供者
     * @param file                单个文件
     * @param allowedExts         允许的后缀
     * @param maxSize             最大文件大小，单位byte
     * @param uploadOptions       本地上传选项
     * @return
     */
    ResponseStatusVO uploadFile(String storageProvider, MultipartFile file, String allowedExts, long maxSize, UploadUtils.UploadOptions uploadOptions);

    /**
     * 多文件上传
     *
     * @param storageProvider 存储提供者
     * @param files               多个文件
     * @param allowedExts         允许的后缀
     * @param maxSize             最大文件大小，单位byte
     * @param uploadOptions       本地上传选项
     * @return
     */
    ResponseStatusVO uploadFiles(String storageProvider, MultipartFile[] files, String allowedExts, long maxSize, UploadUtils.UploadOptions uploadOptions);

    /**
     * 上传图片
     * @param imgUrl 配置文件中取-前端显示的图片路径
     * @param imgParentDir 配置文件中取-后台保存的路径
     * @param imgDir 配置文件中取-图片路径
     * @param keepFileName 配置文件中取-是否保留原文件名
     * @param compressSizes 配置文件中取-压缩大小
     * @param storageProvider 配置文件中取-压缩格式
     * @param file 需要上传的文件
     * @return
     */
    ResponseStatusVO uploadImg(String imgUrl, String imgParentDir, String imgDir, Boolean keepFileName, String compressSizes, String storageProvider, MultipartFile file);

    /**
     * 物理删除文件资源
     * @param deleteBaseUrl 配置文件中取-删除文件的根目录
     * @param imgUrl 需要删除的文件路径
     */
    void deleteImg(String deleteBaseUrl, String imgUrl);
}
